iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
自我挑戰組

深入淺出設計模式 (Head First Design Pattern) - 重點整理及範例分享系列 第 7

[深入淺出設計模式] Ch2 The Observer Pattern (4) - 【觀察者模式】範例 Life-changing application 改變命運的應用

  • 分享至 

  • xImage
  •  

本篇是觀察者模式的第二個範例啦~
相較於天氣監測系統,這個應用可以說是非常簡單。
我們要做出一個可以幫使用者做決定的小程式,書中用JAVA的Swing,我這邊就是用我的方式完成😂
這個應用要有一個按鈕 Should I do it? ,一旦按下就會有兩個角色替你做決定。不意外的,一是天使,另一個就是惡魔。
首先我們先把監聽者 Listener() 介面定義好,然後用天使 Angel() 跟惡魔 Devil() 來實作。

public interface Listener {
    public void getOpinion();
}

public class Angel implements Listener{
    public Angel(){
        System.out.println("I'm angel.");
    }
    public void getOpinion(){
        System.out.println("You better think twice......");
    }
}

public class Devil implements Listener{
    public Devil(){
        System.out.println("I'm devil.");
    }
    public void getOpinion(){
        System.out.println("Just DO IT !");
    }
}

接著就是關鍵的那個按鈕 Button()

public class Button {
    private Listener role;

    public void makeDecision(int r){
        if(r % 2 == 0){            
           role = new Angel();
        }
        else{
            role = new Devil(); 
        }
    } 

    public void pressBtn(){
        System.out.println("Should I do it?");

        Random rand = new Random();
        int randNum = rand.nextInt(100);
        
        makeDecision(randNum);
        role.getOpinion();
    }
}

為了達到隨機的目的,每次按下按鈕 pressBtn() 後都會產生一個隨機數,隨機數是偶數的話就是天使的意見,奇數就是惡魔的意見。

public class lifeChangeApp {
    public static void main(String arg[]){    
        Button btn = new Button();
        btn.pressBtn();
        btn.pressBtn();
        btn.pressBtn();
    }
}

差點忘記放輸出結果
https://ithelp.ithome.com.tw/upload/images/20230922/2016317867r1rGriVW.png


參考資料:

  1. 《深入淺出設計模式 (Head First Design Patterns) 》
  2. 書中程式碼傳送門

程式碼

https://github.com/changtintin/Design-Pattern/tree/master/Ch2/Java/swing


Disclaimer
因為讀的是原文版,所以難免會有翻譯詞不達意或是專有名詞上的差異,有錯誤的話歡迎在留言區一起交流!


上一篇
[深入淺出設計模式] Ch2 The Observer Pattern (3) - 【觀察者模式】範例 天氣監測系統 Weather Monitoring application
下一篇
[深入淺出設計模式] Ch2 The Decorator Pattern (1) 【裝飾者模式】
系列文
深入淺出設計模式 (Head First Design Pattern) - 重點整理及範例分享35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言